﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AModel.Consola;
using AModel.Generador.Dominio;
using System.Collections.Specialized;
using System.Collections;

namespace AModel.Generador.Servicios
{
    public class ServicioClasesConsola: IServicioConsola
    {
        IReceptorConsola Listener;
        ServicioClases servicioClases;
        ListDictionary comandos; 

        #region
        private  interface Ejecutar{
            void EjecutarComando(List<String> arg);
        }

        private class Ejecutar_NewClass: Ejecutar
        {
            public Ejecutar_NewClass(ServicioClases ser) {
                servicio = ser;
            }
            public void EjecutarComando(List<String> arg)
            {
                servicio.CrearNuevaClase(arg[0]);
            }

            public ServicioClases servicio { get; set; }
        }

        #endregion


        public ServicioClasesConsola(Contexto ctx) { 
            servicioClases  = new ServicioClases(ctx);
            comandos = new ListDictionary();
            registrarComandos();
        }

        private void registrarComandos()
        {
            comandos.Add("newClass", new Ejecutar_NewClass(servicioClases));
        }

        public ServicioClasesConsola() { 
            servicioClases  = new ServicioClases(new Contexto() );
        }

        public void SetListener(IReceptorConsola listener)
        {
            Listener = listener;
        }

        public void EjecutarComando(string Comando, List<String> arg)
        {
            if (comandos.Contains(Comando))
            {
                ((Ejecutar)comandos[Comando]).EjecutarComando(arg);
            }
        }

        private void newClass(string[] arg)
        {
            throw new NotImplementedException();
        }

        public IEnumerator ObtenerComandos() {
            return this.comandos.Keys.GetEnumerator();            
        }


    }
}
